COM pluginy

Otázka od: Karel Krtecek

9. 10. 2002 13:51

Dobry den,

mam par dotazu ke COMum v Delphi. Chci delat pluginy a zajimalo by me nekolik
veci:

1) mohu mit v COM pluginu formular, ktery pak zobrazim v me aplikaci? (modalne
i nemodalne) Jak to udelam?

2) v aplikaci mam DBGrid, v COM mam TDataSource. Jak z COM predam ukazatel na
data source tomu gridu? Neco mi rika, ze to nejde, ale co kdyby? A pokud to
opravdu nejde, jak to udelat jinak?

3) ty COM objekty (pluginy) budu mit v nejakych souborech (asi dll?) a ty budu
davat do nejakeho adresare, ktery pak v aplikaci budu prochazet. Jak zjistim,
ze ta DLL je vlastne COM objekt, ktery umi mnou chtene rozhrani? Jde to vubec
moznne takto udelat? Nechci to zbytecne registrovat do registru.

Dekuji za pomoc.

Karel Krtecek


--------------------
Nová příloha o stavebním spořením.
http://finance.centrum.cz/stavspor/


Odpovedá: Milan Tomeš

10. 10. 2002 8:47

Mam takovou obavu, ze jsi neporozumel COM objektum...

> 2) v aplikaci mam DBGrid, v COM mam TDataSource. Jak z COM predam
> ukazatel na
> data source tomu gridu? Neco mi rika, ze to nejde, ale co kdyby?

Teoreticky by to mohlo jit takto (pokud to vse bude prelozeno s balicky):

Pointer(DataSet) := COM.getDataSet;

> 3) ty COM objekty (pluginy) budu mit v nejakych souborech (asi
> dll?) a ty budu
> davat do nejakeho adresare, ktery pak v aplikaci budu prochazet.

Vubec nezalezi na tom zda je budes davat tam ci onam - dulezite je toto:

> Jak zjistim,
> ze ta DLL je vlastne COM objekt, ktery umi mnou chtene rozhrani?

Jde to zjistit. Kazdy COM objekt MUSI implementovat rozhrani IUnknown, ktere
ma mimo jine i metodu QueryInterface a pres tu jses schopen zjistit, zda je
pozadovane rozhrani podporovano. Muzes to napr. zkusit volanim metody
CoCreateInstance. Vysledkem bude bud ukazatel na pozadovane rozhrani nebo
bude vysledek nil a v tom pripade mas nejake navratove kody, ktere
vypovidaji o tom, co se stalo...

> Jde to vubec
> moznne takto udelat? Nechci to zbytecne registrovat do registru.

1. zaregistrovat COM objekty (servery) do systemu - viz. DLLRegisterServer a
DLLUnregisterServer v Platform SDK
2. zapsat si nekam informaci o instalaci toho ktereho pluginu
3. A ted to nejdulezitejsi - musis mit navrhnute nejake rozhrani, ktere bude
spolecne pro vsechny pluginy a musi od nej dedit...

> Karel Krtecek

S pozdravem

Milan Tomes
mailto:milan.tomes@haida.cz


Tato zprava byla zkontrolovana na serveru server.haida.cz
antivirovym programem RAV antivirus.

Odpovedá: Alexandr Stefek

10. 10. 2002 10:10


> 1) mohu mit v COM pluginu formular, ktery pak zobrazim v me aplikaci?
(modalne
> i nemodalne) Jak to udelam?

Ano, overeno, ale neni to az tak trivialni, chce to upravit orig class z
delphi


> 2) v aplikaci mam DBGrid, v COM mam TDataSource. Jak z COM predam ukazatel
na
> data source tomu gridu? Neco mi rika, ze to nejde, ale co kdyby? A pokud
to
> opravdu nejde, jak to udelat jinak?

Nejde, pokud se jedna o out of process nebo dll v surogate. Obecne nutno
vyresit
prenos dat.

> 3) ty COM objekty (pluginy) budu mit v nejakych souborech (asi dll?) a ty
budu
> davat do nejakeho adresare, ktery pak v aplikaci budu prochazet. Jak
zjistim,
> ze ta DLL je vlastne COM objekt, ktery umi mnou chtene rozhrani? Jde to
vubec
> moznne takto udelat? Nechci to zbytecne registrovat do registru.

Lepe registrovat jako klasicky COM a vytvaret dle CLASSID. Registrace
rozhodne
neni zbytecna.

Alexandr STEFEK